import { invoke } from '@tauri-apps/api/core';

// 默认用户ID
export const DEFAULT_USER_ID = 'default_user';

// 生成唯一ID
export const generateId = () => {
  return Date.now().toString(36) + Math.random().toString(36).substr(2)
}

// 获取当前时间的ISO字符串
export const getCurrentISOString = () => {
  return new Date().toISOString();
}

// 获取所有事件
export const getAllEvents = async (userId = DEFAULT_USER_ID) => {
  try {
    const events = await invoke('get_all_events', { userId })
    return events
  } catch (error) {
    console.error('获取事件失败:', error)
    return []
  }
}

// 保存事件
export const saveEvent = async (event, userId = DEFAULT_USER_ID) => {
  try {
    // 确保事件对象具有正确的格式
    const eventToSave = {
      ...event,
      user_id: event.user_id || userId,
      id: event.id || generateId(),
      created_at: event.created_at || getCurrentISOString(),
      updated_at: getCurrentISOString()
    };
    
    await invoke('save_event', { event: eventToSave })
    return true
  } catch (error) {
    console.error('保存事件失败:', error)
    throw error
  }
}

// 删除事件
export const deleteEvent = async (eventId, userId = DEFAULT_USER_ID) => {
  try {
    await invoke('delete_event', { eventId, userId })
    return true
  } catch (error) {
    console.error('删除事件失败:', error)
    throw error
  }
}

// 更新事件
export const updateEvent = async (event, userId = DEFAULT_USER_ID) => {
  try {
    // 确保事件对象具有正确的格式
    const eventToUpdate = {
      ...event,
      user_id: event.user_id || userId,
      updated_at: getCurrentISOString()
    };
    
    await invoke('update_event', { event: eventToUpdate })
    return true
  } catch (error) {
    console.error('更新事件失败:', error)
    throw error
  }
}

// 获取用户设置
export const getUserSetting = async (key, defaultValue = '', userId = DEFAULT_USER_ID) => {
  try {
    const value = await invoke('get_user_setting', { key, defaultValue, userId })
    return value
  } catch (error) {
    console.error('获取用户设置失败:', error)
    return defaultValue
  }
}

// 更新用户设置
export const updateUserSetting = async (key, value, userId = DEFAULT_USER_ID) => {
  try {
    await invoke('update_user_setting', { key, value, userId })
    return true
  } catch (error) {
    console.error('更新用户设置失败:', error)
    throw error
  }
}

// 根据ID获取单个事件
export const getEventById = async (eventId, userId = DEFAULT_USER_ID) => {
  try {
    const event = await invoke('get_event_by_id', { eventId, userId })
    return event
  } catch (error) {
    console.error('获取事件详情失败:', error)
    throw error
  }
}

// 上传文件
export const uploadFile = async (file, userId = DEFAULT_USER_ID) => {
  try {
    // 将文件转换为Uint8Array
    const arrayBuffer = await file.arrayBuffer()
    const fileData = Array.from(new Uint8Array(arrayBuffer))
    
    // 调用Rust后端上传文件接口
    const fileUrl = await invoke('upload_file', { 
      fileData: fileData, 
      filename: file.name, 
      user_id: userId 
    })
    
    return fileUrl
  } catch (error) {
    console.error('上传文件失败:', error)
    throw error
  }
}

// 获取图片数据并转换为DataURL
export const getImageDataUrl = async (imagePath) => {
  try {
    // 调用Rust后端获取图片数据
    const imageData = await invoke('get_image_data', { imagePath: imagePath })
    
    // 将图片数据转换为DataURL
    // 注意：由于Tauri返回的是数组，我们需要将其转换为Uint8Array
    const uint8Array = new Uint8Array(imageData)
    
    // 创建Blob并生成DataURL
    // 由于我们不知道具体的MIME类型，这里可以根据文件扩展名判断或使用通用类型
    let mimeType = 'image/jpeg'
    if (imagePath.endsWith('.png')) {
      mimeType = 'image/png'
    } else if (imagePath.endsWith('.gif')) {
      mimeType = 'image/gif'
    } else if (imagePath.endsWith('.webp')) {
      mimeType = 'image/webp'
    }
    
    const blob = new Blob([uint8Array], { type: mimeType })
    
    // 使用Promise包装FileReader以异步获取DataURL
    return new Promise((resolve, reject) => {
      const reader = new FileReader()
      reader.onloadend = () => {
        resolve(reader.result)
      }
      reader.onerror = reject
      reader.readAsDataURL(blob)
    })
  } catch (error) {
    console.error('获取图片数据失败:', error)
    throw error
  }
}

// 保存用户设置
export const saveUserSettings = async (settings, userId = DEFAULT_USER_ID) => {
  try {
    // 调用Rust后端保存设置接口
    const result = await invoke('save_user_settings', {
      params: {
        userId,
        settings
      }
    })
    
    return result
  } catch (error) {
    console.error('保存用户设置失败:', error)
    throw error
  }
}

// 获取用户设置
export const getUserSettings = async (userId = DEFAULT_USER_ID) => {
  try {
    const settings = await invoke('get_user_settings', {
      user_id: userId
    })
    return settings
  } catch (error) {
    console.error('获取用户设置失败:', error)
    return {}
  }
}

// 获取用户信息
export const getUserInfo = async () => {
  try {
    const userInfo = await invoke('get_user_info')
    return userInfo
  } catch (error) {
    console.error('获取用户信息失败:', error)
    return null
  }
}

// 更新用户信息（包含手机号）
export const updateUserInfo = async (username, avatar, phone) => {
  try {
    const result = await invoke('update_user_info', { 
      username, 
      avatar: avatar || null,
      phone: phone || null
    })
    return result
  } catch (error) {
    console.error('更新用户信息失败:', error)
    return false
  }
}